思維鏈的設計重點就是,如何透過 AI 思維將原始資料轉換為目標資料
我們的終極目標是透過程式碼,生成一份教學文件,忘了可以參見第二章
第二章當中,我們討論出教學文件的資料結構長這樣
interface Tutorial {
title: string;
description: string;
steps: Step[];
}
基本上就是
標題
描述
每個教學步驟
很簡單,親自先做一次,也就是自己親自將撰寫一份程式碼教學文件
然後去審思自己是如何撰寫這份文件的
將你自己撰寫的過程給文字化
好比說
我會先研究這個程式碼的功能是什麼
我會先想一下這個教學文件的標題要叫啥
將程式碼拆解成許多模塊,然後開始研究要先從哪麼模塊開始教學
…
恭喜你,你已經順便把 LLM 的工作流給設計出來了
接下來讓 LLM 復刻整個工作流程即可,不過為了節省成本、提升效果,我會再做這兩件事情
由於我們提出來的任務可能過於簡單,好比說
我會先研究這個程式碼的功能是什麼
我會先想一下這個教學文件的標題要叫啥
這兩件事其實都很簡單,LLM 其實能夠一次生成完畢,我們便可以將這兩個任務合成為同個任務
Prompt:
你是一個能幫助生成教學文件的 AI。
請針對以下程式碼生成教學文件,並提供一個標題和描述。
並依造以下 json 格式輸出:
```
{
"title": "教學文件的標題",
"description": "整個教學文件的功能與說明"
}
這時如果我們輸入一個程式碼
function add(a: number, b: number): number {
return a + b;
}
很好,直接跑結果
{
"title": "數字相加函式教學",
"description": "這份教學文件介紹了如何在 TypeScript 中定義一個簡單的加法函數。函數 `add` 接受兩個數字作為參數,並返回它們的和。這個函數展示了 TypeScript 中如何使用靜態類型來確保輸入和輸出的一致性。"
}
這個生成結果基本符合我們對標題和描述的期望,它包含了 title
和 description
。
不過生成文字上可能太繁瑣,我們可能只需要他大致說明即可,不需要很細部講解整個程式碼
此時我們便可以針對 prompt 進行疊代
你是一個能幫助生成教學文件的 AI。
請針對以下程式碼生成簡潔的教學文件,並提供一個簡明的標題和描述。
請避免對程式碼進行詳細的講解,僅需簡要說明功能。
有時候,我們反覆疊代個四五次仍然無法有效提升生成效果
又或者你發現疊代雖然效果有提升,但是提升效益非常不明顯
此時你必須得意識到該任務難度過高,已經超過 AI 的負擔能力了
這時候你應該將這個任務拆解成兩個或更多的任務
什麼是過度擬合?
這是一種機器學習專有術語,表示模型過於專注於訓練資料中的細節或噪音,從而在新資料上的表現變差。這個概念同樣適用於 LLM 的 prompt 設計。
簡單來講就是你的 prompt 太過 focus 在某個細節上,導致模型在其他情境下的表現反而變差。例如,若你的 prompt 過於具體或狹隘,LLM 可能無法靈活應對不同的需求,進而限制了生成結果的通用性。
好比說,正常的 prompt 是這樣
請用簡單的語言解釋一下什麼是機器學習。
過度擬合 prompt:
請詳細解釋機器學習,尤其是監督式學習的數學公式部分,包括所有常見公式的推導過程和步驟,且只能使用 300 字內的範圍來解釋。
它過度強調某個細節(數學公式、字數限制),可能導致模型在其他方面(例如簡明解釋、靈活性)表現不佳。如此設計的 prompt 會讓模型僅適應極少數的情境,無法在更多元的問題上取得理想效果。
不要從頭到尾只用同一個資料做 prompt 的測試,很容易發生我剛剛提到的過度擬合
你可以先用一個資料將 prompt 疊代到八成滿意度,最後再透過多個測試資料完成最後的 80 到 99 的最後一哩路